/*
 * Copyright 2002-2012 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.aop.framework;

/**
 *
 * 这个接口被能够够基于 AdvisedSupport 配置对象创建 AOP 代理的工厂实现
 * 如果想要实现这个接口，需要注意以下几点：
 * 1. 他们应该实现配置里面应该被代理的所有接口
 * 2. 他们应该实现Advised接口
 * 3. 他们应该实现 equals 方法，目的是为了比较代理接口，通知和目标。
 * 4. 如果他们的所有代理程序和目标对象都是可序列化的，那么他们应该是可以序列化的
 * 5. 如果代理和目标是线程安全的，那么他们应该是线程安全的。
 *
 * 不是所有的代理都允许切面被更改，比如有些配置是需要冻结的，那么这个时候，修改了切面
 * 应该抛出异常
 *
 * @author Rod Johnson
 * @author Juergen Hoeller
 */
public interface AopProxyFactory {

	/**
	 * 为给定的 AOP 配置创建一个AopProxy 。
	 * @param config
	 * @return
	 * @throws AopConfigException
	 */
	AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException;

}
